/*
 * 内容部件处理器 - 人员部件处理器
 * 
 * 主要功能：
 * - 处理PersonPart的内容项事件
 * - 更新内容项的显示文本
 * - 演示内容部件事件处理
 * - 提供内容项生命周期管理
 */

using Lombiq.TrainingDemo.Models;
using OrchardCore.ContentManagement.Handlers;
using System.Threading.Tasks;

namespace Lombiq.TrainingDemo.Handlers;

/// <summary>
/// 人员部件处理器 - 处理PersonPart的内容项事件
/// 
/// 主要用途：
/// - 处理PersonPart的内容项事件
 //* - 更新内容项的显示文本
 //* - 演示内容部件事件处理
 //* - 提供内容项生命周期管理
 //* 
 //* 使用场景：
/// - 当内容项更新时设置显示文本
/// - 处理内容部件的生命周期事件
/// - 自动更新内容项的标题显示
/// - 演示内容部件的事件处理机制
/// 
/// 设计原因：
/// - 为内容部件提供事件处理机制
/// - 实现内容项的自动标题更新
/// - 提供内容项生命周期的管理
/// - 演示内容部件处理器的使用
/// 
/// 设计模式：
/// - 处理器模式：继承ContentPartHandler<T>实现事件处理
/// - 事件模式：重写UpdatedAsync处理更新事件
/// - 生命周期模式：管理内容项的生命周期
/// - 显示模式：更新内容项的显示文本
/// </summary>
// 处理器基本上是内容部件和内容项的事件处理器。当您问"如何在内容部件发布时运行我的代码？"时，
// 最可能的答案就是编写一个处理器。这里这个是内容部件的处理器，但您也可以类似地通过继承ContentHandlerBase
// 为整个内容项创建处理器。
public class PersonPartHandler : ContentPartHandler<PersonPart>
{
    /// <summary>
    /// 更新事件处理方法 - 当内容项更新时设置显示文本
    /// 
    /// 功能说明：
    /// - 当内容项更新时自动调用
    /// - 将人员姓名设置为内容项的显示文本
    /// - 确保在仪表板列表中显示正确的标题
    /// - 提供统一的显示文本管理
    /// 
    /// 处理逻辑：
    /// - 获取PersonPart的Name属性
    /// - 将其设置为ContentItem的DisplayText
    /// - 确保在列表中显示人员姓名
    /// 
    /// 其他可用事件：
    /// - CreatedAsync：内容项创建时
    /// - PublishedAsync：内容项发布时
    /// - UnpublishedAsync：内容项取消发布时
    /// - RemovedAsync：内容项删除时
    /// </summary>
    /// <param name="context">更新内容上下文</param>
    /// <param name="part">人员部件</param>
    /// <returns>完成的任务</returns>
    public override Task UpdatedAsync(UpdateContentContext context, PersonPart part)
    {
        context.ContentItem.DisplayText = part.Name;

        return Task.CompletedTask;
    }
}

// 训练部分结束：内容项显示管理和查询
// 下一站：Fields/ColorField.cs
